package cn.zhentao.controller;

import cn.zhentao.pojo.*;
import cn.zhentao.service.*;
import cn.zhentao.util.Result;
import cn.zhentao.utils.ResponseResult;
import cn.zhentao.utils.TextModerationPlusUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.configurationprocessor.json.JSONArray;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServlet;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@RestController 
@RequestMapping("admin")
public class AdminController extends HttpServlet {
    @Autowired
    IUsersService usersService;
    @Autowired
    IOrdersService ordersService;
    @Autowired
    IDeliveryMenService deliveryMenService;
    @Autowired
    IOrderAssignmentsService orderAssignmentsService;
    @Autowired
    IUserAddressesService userAddressesService;

    //查询所有订单
    @PostMapping("adminSel")
    public List<Orders> adminSel(){
        List<Orders> list = ordersService.list();
        return list;
    }

    //查询所有用户
    @PostMapping ("adminUserSel")
    public List<Users> adminUserSel(){
        List<Users> list = usersService.list();
        return list;
    }

    //新增用户
    @PostMapping("adminAdd")
    public String adminAdd(@RequestBody Users users) throws JSONException {
        //users.getUsername()是需要审核的内容,整个审核完成返回一个code码
        ResponseResult result = TextModerationPlusUtil.checkContent(users.getUsername());
        //判断code码600为成功 其他为失败 601失败 602转人工(有人工审核时使用)
        if(result.getCode()==600){
            //添加用户
           usersService.save(users);
            //返回信息
            return "用户资料审核完成,无违规信息,用户添加成功";
        }else {
            //获取错误信息
            String message = result.getErrorMessage();
            //转为json格式取出数据
            JSONObject jsonObject = new JSONObject(message);
            //获取风险等级
            String riskLevel = jsonObject.getString("riskLevel");
            //输出风险等级
            String fx = "风险等级：" + riskLevel;
            // 提取result数组
            JSONArray resultArray = jsonObject.getJSONArray("result");
            System.out.println("检测结果：");
            //添加String类型的数组
            ArrayList<String> strings = new ArrayList<>();
            //设置状态信息
            strings.add("失败");
            for (int i = 0; i < resultArray.length(); i++) {
                //获取json数组中每个的信息
                JSONObject item = resultArray.getJSONObject(i);
                //读取风险度
                double confidence = item.getDouble("confidence");
                //读取标签
                String label = item.getString("label");
                // 读取风险词汇
                String riskWords = item.optString("riskWords", "无风险词汇");
                //添加到数组中
                String a = ("  条目 " + (i + 1) + ":");
                String b = ("    风险：" + confidence);
                String c = ("    标签：" + label);
                String d = ("    风险词汇：" + riskWords);
                strings.add(a);
                strings.add(b);
                strings.add(c);
                strings.add(d);
            }
            //输出到前端
            return "用户资料审核完成,有违规信息,用户添加失败"+fx+strings;
        }
    }


    //根据用户名或手机号查询用户
    @PostMapping("adminUserYh")
    public Users adminUserYh(String username,String phone){
        List<Users> list = usersService.list();
        for (Users users : list) {
            if (users.getUsername().equals(username) || users.getPhone().equals(phone)){
                return users;
            }
        }
        return null;
    }

    //用户数据分页查询
    @PostMapping("FindPage")
    public Result FindPage(@RequestBody QueryUser queryUser){
       Page<Users> page = usersService.findPage(queryUser);
       return Result.OK(page);
    }


    //配送员添加
    @PostMapping("adminDeliveryAdd")
    public String adminDeliveryAdd(@RequestBody DeliveryMen deliveryMen) throws JSONException {
        //users.getUsername()是需要审核的内容,整个审核完成返回一个code码
        ResponseResult result1 = TextModerationPlusUtil.checkContent(deliveryMen.getName());
        //判断code码600为成功 其他为失败 601失败 602转人工(有人工审核时使用)
        if(result1.getCode()==600){
            //添加用户
            deliveryMenService.save(deliveryMen);
            //返回信息
            return "用户资料审核完成,无违规信息,用户添加成功";
        }else {
            //获取错误信息
            String message = result1.getErrorMessage();
            //转为json格式取出数据
            JSONObject jsonObject = new JSONObject(message);
            //获取风险等级
            String riskLevel = jsonObject.getString("riskLevel");
            //输出风险等级
            String fx = "风险等级：" + riskLevel;
            // 提取result数组
            JSONArray resultArray = jsonObject.getJSONArray("result");
            System.out.println("检测结果：");
            //添加String类型的数组
            ArrayList<String> strings = new ArrayList<>();
            //设置状态信息
            strings.add("失败");
            for (int i = 0; i < resultArray.length(); i++) {
                //获取json数组中每个的信息
                JSONObject item = resultArray.getJSONObject(i);
                //读取风险度
                double confidence = item.getDouble("confidence");
                //读取标签
                String label = item.getString("label");
                // 读取风险词汇
                String riskWords = item.optString("riskWords", "无风险词汇");
                //添加到数组中
                String a = ("  条目 " + (i + 1) + ":");
                String b = ("    风险：" + confidence);
                String c = ("    标签：" + label);
                String d = ("    风险词汇：" + riskWords);
                strings.add(a);
                strings.add(b);
                strings.add(c);
                strings.add(d);
            }
            //输出到前端
            return "用户资料审核完成,有违规信息,用户添加失败"+fx+strings;
        }
    }
// 配送员搜索和分页查询
    @PostMapping("adminDeliverySouSu")
    public Result adminDeliverySouSu(@RequestBody QueryDeliverMen queryDeliverMen){
        Page<DeliveryMen>page=deliveryMenService.adminDeliverySouSu(queryDeliverMen);
        return Result.OK(page);
    }

    //订单分页查询和搜索
    @PostMapping("adminOrder")
    public Result adminOrder(@RequestBody QueryOrders queryOrders){
        Page<Orders>page=ordersService.orderFind(queryOrders);
        return Result.OK(page);
    }
    
    /**
     * 切换用户启用/禁用状态
     * @param userId 用户ID
     * @return 操作结果456
     */
    @PostMapping("toggleUserStatus")
    public Result toggleUserStatus(Integer userId) {
        try {
            System.out.println("接收到切换用户状态请求，用户ID: " + userId);
            
            if (userId == null) {
                System.out.println("用户ID为空");
                return Result.ERROR("用户ID不能为空");
            }
            
            // 根据用户ID查询用户信息
            Users user = usersService.getById(userId);
            if (user == null) {
                System.out.println("用户不存在，ID: " + userId);
                return Result.ERROR("用户不存在");
            }
            
            System.out.println("查询到用户: " + user.getUsername() + ", 当前状态: " + user.getStatus());
            
            // 切换状态：0-禁用，1-启用
            Integer currentStatus = user.getStatus();
            Integer newStatus = (currentStatus == null || currentStatus == 0) ? 1 : 0;
            
            System.out.println("切换状态: " + currentStatus + " -> " + newStatus);
            
            // 更新用户状态
            user.setStatus(newStatus);
            boolean success = usersService.updateById(user);
            
            System.out.println("更新结果: " + success);
            
            if (success) {
                String statusText = newStatus == 1 ? "启用" : "禁用";
                System.out.println("用户" + statusText + "成功");
                return Result.OK("用户" + statusText + "成功", newStatus);
            } else {
                System.out.println("数据库更新失败");
                return Result.ERROR("操作失败，数据库更新失败");
            }
        } catch (Exception e) {
            System.out.println("操作异常: " + e.getMessage());
            e.printStackTrace();
            return Result.ERROR("操作异常：" + e.getMessage());
        }
    }
    
    /**
     * 批量切换用户状态
     * @param userIds 用户ID列表
     * @param status 目标状态：0-禁用，1-启用
     * @return 操作结果   jiji
     */
    //啦啦啦啦啦啦啦啦啦啦
    @PostMapping("batchToggleUserStatus")
    public Result batchToggleUserStatus(@RequestBody List<Integer> userIds, Integer status) {
        try {
            if (userIds == null || userIds.isEmpty()) {
                return Result.ERROR("请选择要操作的用户");
            }
            
            List<Users> usersToUpdate = new ArrayList<>();
            for (Integer userId : userIds) {
                Users user = usersService.getById(userId);
                if (user != null) {
                    user.setStatus(status);
                    usersToUpdate.add(user);
                }
            }
            
            boolean success = usersService.updateBatchById(usersToUpdate);
            
            if (success) {
                String statusText = status == 1 ? "启用" : "禁用";
                return Result.OK("批量" + statusText + "成功，共操作" + usersToUpdate.size() + "个用户");
            } else {
                return Result.ERROR("批量操作失败");
            }
        } catch (Exception e) {
            return Result.ERROR("批量操作异常：" + e.getMessage());
        }
    }

    /**
     * 测试接口 - 获取用户状态信息
     * @param userId 用户ID
     * @return 用户状态信息
     */
    @PostMapping("getUserStatus")
    public Result getUserStatus(Integer userId) {
        try {
            System.out.println("测试接口 - 获取用户状态，用户ID: " + userId);

            if (userId == null) {
                return Result.ERROR("用户ID不能为空");
            }

            Users user = usersService.getById(userId);
            if (user == null) {
                return Result.ERROR("用户不存在");
            }

//            return Result.OK("获取用户状态成功", {
//                id: user.getId(),
//                username: user.getUsername(),
//                status: user.getStatus(),
//                statusText: user.getStatus() == 1 ? "启用" : "禁用"
//            });
        } catch (Exception e) {
            System.out.println("获取用户状态异常: " + e.getMessage());
            e.printStackTrace();
            return Result.ERROR("获取用户状态异常：" + e.getMessage());
        }
return null;
    }

    //头像上传接口
    @PostMapping("uploadAvatar")
    public Result uploadAvatar(MultipartFile file) throws IOException {
        try {
            if (file == null || file.isEmpty()) {
                return Result.ERROR("请选择要上传的文件");
            }
            
            String originalFilename = file.getOriginalFilename();
            if (originalFilename == null || originalFilename.isEmpty()) {
                return Result.ERROR("文件名不能为空");
            }
            
            // 检查文件类型
            String contentType = file.getContentType();
            if (contentType == null || !contentType.startsWith("image/")) {
                return Result.ERROR("只能上传图片文件");
            }
            
            // 检查文件大小 (限制为5MB)
            if (file.getSize() > 5 * 1024 * 1024) {
                return Result.ERROR("文件大小不能超过5MB");
            }
            
            // 创建保存目录
            String path = "C:/Users/86156/Desktop/MyProect/myProjectImages/images/pic/";
            File dir = new File(path);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            
            // 生成唯一文件名
            int i = originalFilename.lastIndexOf(".");
            String extname = originalFilename.substring(i); // .jpg
            String name = UUID.randomUUID().toString().replaceAll("-", "");
            String newname = name + extname;
            
            // 保存文件
            File f = new File(path, newname);
            file.transferTo(f);
            
            // 返回访问URL
            String url = "http://localhost:4000/images/pic/" + newname;
            return Result.OK("头像上传成功", Integer.valueOf(url));
            
        } catch (Exception e) {
            e.printStackTrace();
            return Result.ERROR("头像上传失败：" + e.getMessage());
        }
    }
 }
